001 /*********************************************************************************************** 002 * Tekijä: Jukka Salminen 003 * Opiskelijanumero: i79947 004 * Email: jukka.salminen@uwasa.fi 005 * Tekoaika: 23.9.2002 006 * Kurssi/vuosi: Ohjelmoinnin jatkokurssi/kevät 2002 007 * Työn tunnus: Harjoitustyö: Taulukkoeditori web-sivulle 008 *********************************************************************************************** 009 * XMLData-luokka 010 *==================== 011 * Tämän luokan metodeja kutsutaan QDParser-luokasta kun XML-dokumenttia 012 * parsitaan. Metodit startElement ja endElement tekevät päätyön. Luokka 013 * toteuttaa rajapinnan DocHandler. 014 * 015 * XML-dokumentista löydetyt elementit (tässä tapauksessa ainoat kiinnostavat 016 * elementit ovat <table>, <tr> ja <td>) talletetaan vektoreihin. Nämä vektorit 017 * muodostavat pääohjelman TableModelin. Valmis TableModel palautetaan metodissa 018 * getDataVector. 019 * 020 * Metodit 021 *-------- 022 * startDocument Ei erityistä tehtävää 023 * endDocument Ei erityistä tehtävää 024 * 025 * startElement Käsittelee aloittavat tagit 026 * 027 * endElement Käsittelee lopettavat tagit 028 * 029 * text Lisää merkkejä m_sb-stringBufferiin 030 * 031 * getDataVector Palauttaa valmiin datavektorin 032 * 033 * Jäsenmuuttujat 034 *--------------- 035 * m_vRows 036 * ------- 037 * Vector Datavektori, koostuu rivivektoreista 038 * 039 * m_vRowVector 040 * ------------ 041 * Vector Datavektorin rivivektorit kloonataan tästä vektorista 042 * 043 * m_sb 044 * ---- 045 * StringBuffer Koska Stringin käyttö on hidasta, kerätään taulukon alkoiden 046 * data tähän StringBufferiin, josta se edelleen talletetaan 047 * datavektoriin, 048 * 049 * 050 * Paikalliset muuttujat 051 *---------------------- 052 * Ei ole 053 */ 054 package jsxml; 055 056 import jsxml.qdxml.*; 057 import java.util.Hashtable; 058 import java.util.Enumeration; 059 060 import java.io.*; 061 import java.net.*; 062 import java.util.Vector; 063 064 public class XMLdata implements DocHandler 065 { 066 Vector m_vRows = new Vector(10, 10); 067 Vector m_vRowVector = new Vector(10, 10); 068 private StringBuffer m_sb = new StringBuffer(); 069 070 // Implementation of DocHandler is below this line 071 public void startDocument() 072 { 073 } 074 public void endDocument() 075 { 076 } 077 public void startElement(String elem,Hashtable h) 078 { 079 if(elem.equals("tr")) 080 { 081 } 082 if (elem.equals("td")) 083 { 084 m_sb.setLength(0); 085 /* Attribuutit pitäisi säilöä erikseen, 086 * jos ne haluaa säilyttää. 087 Enumeration e = h.keys(); 088 while(e.hasMoreElements()) 089 { 090 String key = (String)e.nextElement(); 091 String val = (String)h.get(key); 092 m_sb.append(" "+key+"=\""+val+"\""); 093 } 094 */ 095 } 096 if(elem.equals("b") || elem.equals("strong")) 097 { 098 m_sb.append("<"+elem+">"); 099 } 100 } 101 public void endElement(String elem) 102 { 103 if(elem.equals("tr")) 104 { 105 m_vRows.addElement(m_vRowVector.clone()); 106 m_vRowVector.clear(); 107 return; 108 } 109 if (elem.equals("td")) 110 { 111 m_vRowVector.addElement(m_sb.toString()); 112 m_sb.setLength(0); 113 return; 114 } 115 if(elem.equals("b") || elem.equals("strong")) 116 { 117 m_sb.append("</"+elem+">"); 118 } 119 } 120 public void text(String text) 121 { 122 m_sb.append(text); 123 } 124 // implementation of DocHandler is above this line 125 public Vector getDataVector() 126 { 127 return m_vRows; 128 } 129 }